import { h, render } from 'vue'
import confirmComponent from './index.vue'

// 当用户前两个参数只上传了一个那么title会被当做content使用
export const confirm = (
  title,
  content,
  cancelText = '取消',
  confirmText = '确定'
) => {
  return new Promise((resolve, reject) => {
    if (title && !content) {
      content = title
      title = ''
    }

    // 关闭事件回调
    const close = () => {
      // 把渲染的vnode去掉
      render(null, document.body)
    }

    // 取消事件回调
    const cancelHandlerClick = () => {
      reject(new Error('取消按钮点击'))
    }

    // 确定事件回调
    const confirmHandlerClick = () => {
      resolve()
    }

    // 渲染vnode  h函数第一个参数接收组件 二个参数接受组件需要的prop
    const vnode = h(confirmComponent, {
      title,
      content,
      cancelText,
      confirmText,
      cancelHandlerClick,
      confirmHandlerClick,
      close
    })

    // 用render函数将vnode插到body 第一个参数是vnode  第二个参数是渲染位置
    render(vnode, document.body)
  })
}
